Loading required package: ggplot2
Loading required package: reshape2
# importing our data
data = data.import()
Read 5 items
Read 3 items
Read 3 items
Read 5 items
Read 3 items
Read 3 items
Read 4 items
Read 4 items
Read 18 items
Read 6 items
Read 8 items
Read 6 items
Read 18 items
Read 6 items
Read 8 items
Read 6 items
Read 18 items
Read 6 items
Read 8 items
Read 6 items
Read 9 items
Read 3 items
Read 2 items
Read 6 items
Read 13 items
Read 4 items
Read 7 items
Read 4 items
Read 3 items
Read 2 items
Read 2 items
the condition has length > 1 and only the first element will be used
head(data)
Overview
summary(data)
dtPosix dt dt_iso city_id temp temp_min temp_max
Min. :2017-01-01 00:00:00 Min. :1.483e+09 2017-03-18 06:00:00 +0000 UTC: 3 Min. :2950159 Min. :263.1 Min. :261.1 Min. :263.7
1st Qu.:2017-04-01 10:45:00 1st Qu.:1.491e+09 2017-03-30 01:00:00 +0000 UTC: 3 1st Qu.:2950159 1st Qu.:277.1 1st Qu.:277.1 1st Qu.:277.4
Median :2017-07-03 15:30:00 Median :1.499e+09 2017-03-30 02:00:00 +0000 UTC: 3 Median :2950159 Median :283.1 Median :283.1 Median :283.1
Mean :2017-07-03 03:05:03 Mean :1.499e+09 2017-03-30 03:00:00 +0000 UTC: 3 Mean :2950159 Mean :283.4 Mean :283.0 Mean :283.7
3rd Qu.:2017-10-04 02:15:00 3rd Qu.:1.507e+09 2017-03-30 04:00:00 +0000 UTC: 3 3rd Qu.:2950159 3rd Qu.:289.1 3rd Qu.:289.1 3rd Qu.:289.1
Max. :2017-12-31 23:00:00 Max. :1.515e+09 (Other) :9104 Max. :2950159 Max. :305.1 Max. :305.1 Max. :305.1
NA's :37 NA's : 37 NA's :37 NA's :37 NA's :37 NA's :37
pressure humidity wind_speed wind_deg rain_3h clouds_all weather_id weather_main weather_description
Min. : 980 Min. : 14.00 Min. : 0.00 Min. : 0.0 Min. :0.118 Min. : 0.00 Min. :200.0 Clouds :3434 Sky is Clear :2972
1st Qu.:1010 1st Qu.: 67.00 1st Qu.: 2.00 1st Qu.:120.0 1st Qu.:0.150 1st Qu.: 0.00 1st Qu.:701.0 Clear :2973 broken clouds :2380
Median :1016 Median : 81.00 Median : 3.00 Median :230.0 Median :0.380 Median : 75.00 Median :800.0 Rain :1195 light rain : 803
Mean :1015 Mean : 77.17 Mean : 3.43 Mean :197.5 Mean :0.672 Mean : 45.13 Mean :728.3 Mist : 598 mist : 598
3rd Qu.:1021 3rd Qu.: 93.00 3rd Qu.: 5.00 3rd Qu.:270.0 3rd Qu.:0.889 3rd Qu.: 75.00 3rd Qu.:803.0 Fog : 383 scattered clouds: 536
Max. :1043 Max. :100.00 Max. :14.00 Max. :360.0 Max. :9.865 Max. :100.00 Max. :804.0 (Other): 536 (Other) :1830
NA's :37 NA's :37 NA's :37 NA's :37 NA's :9066 NA's :37 NA's :37 NA's : 37 NA's : 37
weather_icon weekday hours chb.all chb.background chb.traffic cht.all cht.background cht.traffic
01n :1593 sun :1331 4 : 392 Min. :0.2000 Min. :0.1000 Min. :0.200 Min. : 0.000 Min. : 0.00 Min. : 0.000
04d :1390 wed :1316 6 : 392 1st Qu.:0.6667 1st Qu.:0.5000 1st Qu.:0.750 1st Qu.: 1.333 1st Qu.: 1.00 1st Qu.: 1.500
01d :1379 fri :1314 1 : 391 Median :0.9333 Median :0.7000 Median :1.050 Median : 2.000 Median : 1.00 Median : 2.500
04n :1171 thu :1303 3 : 390 Mean :1.1730 Mean :0.9167 Mean :1.303 Mean : 2.483 Mean : 1.81 Mean : 2.819
50n : 673 tue :1290 2 : 389 3rd Qu.:1.3667 3rd Qu.:1.1000 3rd Qu.:1.550 3rd Qu.: 3.000 3rd Qu.: 2.00 3rd Qu.: 3.500
(Other):2913 (Other):2565 (Other):7165 Max. :8.9000 Max. :9.8000 Max. :9.400 Max. :19.667 Max. :24.00 Max. :18.500
NA's : 37 NA's : 37 NA's : 37 NA's :1 NA's :162 NA's :9 NA's :1 NA's :161 NA's :4
co.all co.traffic no2.all no2.background no2.traffic no2.suburb no.all no.background
Min. :0.1000 Min. :0.1000 Min. : 3.929 Min. : 4.00 Min. : 4.00 Min. : 1.20 Min. : 0.4375 Min. : 0.000
1st Qu.:0.2667 1st Qu.:0.2667 1st Qu.: 19.750 1st Qu.: 15.40 1st Qu.: 31.00 1st Qu.: 6.60 1st Qu.: 6.4375 1st Qu.: 1.250
Median :0.3500 Median :0.3500 Median : 27.625 Median : 22.40 Median : 44.83 Median :10.80 Median : 13.0000 Median : 2.800
Mean :0.3867 Mean :0.3867 Mean : 29.279 Mean : 25.35 Mean : 45.88 Mean :12.94 Mean : 17.8855 Mean : 6.473
3rd Qu.:0.4500 3rd Qu.:0.4500 3rd Qu.: 36.806 3rd Qu.: 32.60 3rd Qu.: 58.33 3rd Qu.:17.00 3rd Qu.: 23.0000 3rd Qu.: 6.000
Max. :2.2500 Max. :2.2500 Max. :144.062 Max. :171.40 Max. :187.67 Max. :66.40 Max. :273.3125 Max. :361.800
NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :1
no.traffic no.suburb nox.all nox.background nox.traffic nox.suburb o3.all o3.background o3.traffic
Min. : 1.167 Min. : 0.000 Min. : 6.00 Min. : 5.20 Min. : 7.833 Min. : 1.60 Min. : 0.50 Min. : 0.00 Min. : 1.0
1st Qu.: 15.333 1st Qu.: 0.200 1st Qu.: 30.69 1st Qu.: 18.20 1st Qu.: 55.333 1st Qu.: 7.00 1st Qu.: 24.17 1st Qu.: 20.00 1st Qu.:11.0
Median : 31.143 Median : 0.400 Median : 48.27 Median : 27.00 Median : 94.000 Median : 11.60 Median : 42.50 Median : 38.50 Median :25.0
Mean : 40.297 Mean : 1.783 Mean : 56.59 Mean : 35.22 Mean :107.422 Mean : 15.66 Mean : 44.07 Mean : 40.46 Mean :24.3
3rd Qu.: 53.500 3rd Qu.: 1.200 3rd Qu.: 71.00 3rd Qu.: 41.60 3rd Qu.:140.333 3rd Qu.: 19.25 3rd Qu.: 60.67 3rd Qu.: 57.50 3rd Qu.:35.0
Max. :419.667 Max. :90.000 Max. :561.44 Max. :723.80 Max. :828.500 Max. :189.20 Max. :142.67 Max. :138.00 Max. :72.0
NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :2 NA's :8469
o3.suburb pm10.all pm10.background pm10.traffic pm10.suburb so2.all so2.background so2.traffic
Min. : 0.25 Min. : 4.00 Min. : 3.333 Min. : 5.00 Min. : 3.00 Min. : 0.000 Min. : 0.000 Min. : 0.000
1st Qu.: 25.62 1st Qu.: 13.91 1st Qu.: 12.667 1st Qu.: 16.80 1st Qu.: 10.00 1st Qu.: 0.500 1st Qu.: 0.000 1st Qu.: 1.000
Median : 45.00 Median : 18.82 Median : 17.667 Median : 22.40 Median : 14.00 Median : 1.000 Median : 1.000 Median : 1.000
Mean : 45.94 Mean : 22.70 Mean : 21.351 Mean : 26.68 Mean : 17.29 Mean : 1.522 Mean : 1.198 Mean : 1.844
3rd Qu.: 63.00 3rd Qu.: 27.70 3rd Qu.: 26.333 3rd Qu.: 32.20 3rd Qu.: 21.33 3rd Qu.: 1.500 3rd Qu.: 1.000 3rd Qu.: 2.000
Max. :145.00 Max. :283.73 Max. :211.667 Max. :465.40 Max. :106.33 Max. :356.000 Max. :27.000 Max. :699.000
NA's :1 NA's :1 NA's :1 NA's :1 NA's :1 NA's :4 NA's :27 NA's :54
wind.deg.name
Length:9156
Class :character
Mode :character
pm10 over the year
pollutant = "pm10.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

chb over the year
pollutant = "chb.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

CHT over the year
pollutant = "cht.all"
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

CO over the year
pollutant = "co.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

5. NOX over the year
pollutant = "nox.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

6. O3 over the year
pollutant = "o3.all"
plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

pm10 over the year
pollutant = "so2.all"
plot.pollutant(data, pollutant, month = "01", day = "01", title = "1. January with silvester firework peak")

plot.pollutant(data, pollutant, month = "01")

plot.pollutant(data, pollutant, month = "02")

plot.pollutant(data, pollutant, month = "03")

plot.pollutant(data, pollutant, month = "04")

plot.pollutant(data, pollutant, month = "05")

plot.pollutant(data, pollutant, month = "06")

plot.pollutant(data, pollutant, month = "07")

plot.pollutant(data, pollutant, month = "08")

plot.pollutant(data, pollutant, month = "09")

plot.pollutant(data, pollutant, month = "10")

plot.pollutant(data, pollutant, month = "11")

plot.pollutant(data, pollutant, month = "12")

pm10 to wind
ddply(data,~wind_speed,summarise,pm10.all.mean=mean(pm10.all),sd=sd(pm10.all))
ggplot(data, aes(wind_speed,pm10.all, group = wind_speed)) + geom_boxplot() + ylim(0, 70) + stat_summary(fun.y=mean, colour="darkred", geom="point")

ddply(data,~wind.deg.name,summarise,pm10.all.mean=mean(pm10.all),sd=sd(pm10.all))
ggplot(data, aes(wind.deg.name,pm10.all, group = wind.deg.name)) + geom_boxplot() + ylim(0, 70) + stat_summary(fun.y=mean, colour="darkred", geom="point")

ddply(data,~wind.deg.name,summarise,wind_speed.mean=mean(wind_speed),sd=sd(wind_speed))
ggplot(data, aes(wind.deg.name,wind_speed, group = wind.deg.name)) + geom_boxplot() + ylim(0, 15) + stat_summary(fun.y=mean, colour="darkred", geom="point")

LS0tCnRpdGxlOiAiRGF0YSBFeHBsb3JhdGlvbiBvZiBwb2xsdXRhbnRzIHBsdXMgd2VhdGhlciBpbiBCZXJsaW4iCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCmBgYHtyIHNldHVwLCBlY2hvPUZBTFNFfQpzb3VyY2UoIi4vZGF0YUltcG9ydC5SIikKbGlicmFyeShsYXR0aWNlKQpyZXF1aXJlKGdncGxvdDIpCnJlcXVpcmUocmVzaGFwZTIpCnJlcXVpcmUocGx5cikKCnBsb3QucG9sbHV0YW50ID0gZnVuY3Rpb24oZGF0YSwgcG9sbHV0YW50Lm5hbWUsIG1vbnRoPSIwMCIsIGRheT0iMDAiLCB0aXRsZT0iIikgewogIGRmID0gZGF0YVtjKCJkdFBvc2l4IiwgcG9sbHV0YW50Lm5hbWUpXQogIGRmID0gbWVsdChkZiwgaWQudmFycyA9ICdkdFBvc2l4JywgdmFyaWFibGUubmFtZSA9ICJwb2xsdXRhbnQiLCB2YWx1ZS5uYW1lID0gInZhbHVlIikKICAKICBpZiAoZGF5ID09ICIwMCIgJiBtb250aCAhPSAiMDAiKQogICAgZGYgPSBzdWJzZXQoZGYsIGZvcm1hdC5EYXRlKGR0UG9zaXgsICIlbSIpPT1tb250aCkKICBlbHNlIGlmIChkYXkgIT0gIjAwIiAmIG1vbnRoICE9ICIwMCIpCiAgICBkZiA9IHN1YnNldChkZiwgZm9ybWF0LkRhdGUoZHRQb3NpeCwgIiVtIik9PW1vbnRoICYgZm9ybWF0LkRhdGUoZHRQb3NpeCwgIiVkIik9PWRheSkKICAKICBwbG90IDwtIGdncGxvdChkZiwgYWVzKGR0UG9zaXgsdmFsdWUpKSArIGdlb21fbGluZShhZXMoY29sb3VyID0gcG9sbHV0YW50KSkKICBwbG90ICsgZ2d0aXRsZSh0aXRsZSkKfSAgCmBgYAoKCmBgYHtyfQojIGltcG9ydGluZyBvdXIgZGF0YQpkYXRhID0gZGF0YS5pbXBvcnQoKQoKaGVhZChkYXRhKQpgYGAKCgojIyBPdmVydmlldwpgYGB7cn0Kc3VtbWFyeShkYXRhKQpgYGAKCiMjIHBtMTAgb3ZlciB0aGUgeWVhcgoKYGBge3J9CnBvbGx1dGFudCA9ICJwbTEwLmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCgojIyBjaGIgb3ZlciB0aGUgeWVhcgpgYGB7cn0KcG9sbHV0YW50ID0gImNoYi5hbGwiCgpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIiwgZGF5ID0gIjAxIiwgdGl0bGUgPSAiMS4gSmFudWFyeSB3aXRoIHNpbHZlc3RlciBmaXJld29yayBwZWFrIikKICAKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDIiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAzIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDUiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA2IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNyIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDgiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA5IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTEiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEyIikKYGBgCgojIyBDSFQgb3ZlciB0aGUgeWVhcgpgYGB7cn0KcG9sbHV0YW50ID0gImNodC5hbGwiCiAgCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAyIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMyIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDQiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA1IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDciKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA4IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTAiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjExIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMiIpCmBgYAoKIyMgQ08gb3ZlciB0aGUgeWVhcgpgYGB7cn0KcG9sbHV0YW50ID0gImNvLmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCiMjIDUuIE5PWCBvdmVyIHRoZSB5ZWFyCmBgYHtyfQpwb2xsdXRhbnQgPSAibm94LmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCiMjIDYuIE8zIG92ZXIgdGhlIHllYXIKYGBge3J9CnBvbGx1dGFudCA9ICJvMy5hbGwiCiAgCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAyIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMyIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDQiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA1IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDciKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA4IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTAiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjExIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMiIpCmBgYAoKIyMgcG0xMCBvdmVyIHRoZSB5ZWFyCmBgYHtyfQpwb2xsdXRhbnQgPSAic28yLmFsbCIKCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDEiLCBkYXkgPSAiMDEiLCB0aXRsZSA9ICIxLiBKYW51YXJ5IHdpdGggc2lsdmVzdGVyIGZpcmV3b3JrIHBlYWsiKQogIApwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjAxIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwMiIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDMiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA0IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwNSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDYiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjA3IikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIwOCIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMDkiKQpwbG90LnBvbGx1dGFudChkYXRhLCBwb2xsdXRhbnQsIG1vbnRoID0gIjEwIikKcGxvdC5wb2xsdXRhbnQoZGF0YSwgcG9sbHV0YW50LCBtb250aCA9ICIxMSIpCnBsb3QucG9sbHV0YW50KGRhdGEsIHBvbGx1dGFudCwgbW9udGggPSAiMTIiKQpgYGAKCiMjIHBtMTAgdG8gd2luZApgYGB7cn0KZGRwbHkoZGF0YSx+d2luZF9zcGVlZCxzdW1tYXJpc2UscG0xMC5hbGwubWVhbj1tZWFuKHBtMTAuYWxsKSxzZD1zZChwbTEwLmFsbCkpCmdncGxvdChkYXRhLCBhZXMod2luZF9zcGVlZCxwbTEwLmFsbCwgZ3JvdXAgPSB3aW5kX3NwZWVkKSkgKyBnZW9tX2JveHBsb3QoKSArIHlsaW0oMCwgNzApICsgc3RhdF9zdW1tYXJ5KGZ1bi55PW1lYW4sIGNvbG91cj0iZGFya3JlZCIsIGdlb209InBvaW50IikKCgpkZHBseShkYXRhLH53aW5kLmRlZy5uYW1lLHN1bW1hcmlzZSxwbTEwLmFsbC5tZWFuPW1lYW4ocG0xMC5hbGwpLHNkPXNkKHBtMTAuYWxsKSkKZ2dwbG90KGRhdGEsIGFlcyh3aW5kLmRlZy5uYW1lLHBtMTAuYWxsLCBncm91cCA9IHdpbmQuZGVnLm5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgeWxpbSgwLCA3MCkgKyBzdGF0X3N1bW1hcnkoZnVuLnk9bWVhbiwgY29sb3VyPSJkYXJrcmVkIiwgZ2VvbT0icG9pbnQiKQoKZGRwbHkoZGF0YSx+d2luZC5kZWcubmFtZSxzdW1tYXJpc2Usd2luZF9zcGVlZC5tZWFuPW1lYW4od2luZF9zcGVlZCksc2Q9c2Qod2luZF9zcGVlZCkpCmdncGxvdChkYXRhLCBhZXMod2luZC5kZWcubmFtZSx3aW5kX3NwZWVkLCBncm91cCA9IHdpbmQuZGVnLm5hbWUpKSArIGdlb21fYm94cGxvdCgpICsgeWxpbSgwLCAxNSkgKyBzdGF0X3N1bW1hcnkoZnVuLnk9bWVhbiwgY29sb3VyPSJkYXJrcmVkIiwgZ2VvbT0icG9pbnQiKQpgYGAKCgoKCgo=